﻿Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.Design.WebControls
Imports System.Text
Imports System.IO
Imports System.Drawing
Imports System.Web
Imports System.Runtime.Serialization
Imports System.Data.SqlClient
Imports System.ComponentModel.Design
Imports System.Drawing.Design



Public Class ProveedorRegistroServidor
  Inherits ScriptControl
  Private WebMethodValor As String = ""
  ''' <summary>
  ''' Nombre del WebMethod al cual llama para obtener los registros.
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  <Description("Nombre del WebMethod al cual llama para obtener los registros.")> _
  Public Property WebMethod() As String
    Get
      Return WebMethodValor
    End Get
    Set(ByVal value As String)
      WebMethodValor = value
    End Set
  End Property

  Dim RecibidoValor As String = ""
  ''' <summary>
  ''' Función Javascript que se ejecutará una vez modificado el registro en el Servidor.
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  <Description("Función Javascript que se ejecutará a la vuelta de la llamada al servidor.")> _
  Public Property Recibido() As String
    Get
      Return RecibidoValor
    End Get
    Set(ByVal value As String)
      RecibidoValor = value
    End Set
  End Property

  
  Dim AsincronicoValor As Boolean = True
  ''' <summary>
  ''' Indica si la comunicacion con el servidor se realizara de forma sincrónica o asincrónica, por defecto es Asincrónica
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  <Description("Indica si la comunicacion con el servidor se realizara de forma sincrónica o asincrónica, por defecto es Asincrónica.")> _
  Public Property Asincronico() As Boolean
    Get
      Return AsincronicoValor
    End Get
    Set(ByVal value As Boolean)
      AsincronicoValor = value
    End Set
  End Property

  Dim ErradoValor As String = ""
  ''' <summary>
  ''' Función Javascript que se ejecutará en caso de error en el servidor.
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  <Description("Función Javascript que se ejecutará en caso de error en el servidor.")> _
  Public Property Errado() As String
    Get
      Return ErradoValor
    End Get
    Set(ByVal value As String)
      ErradoValor = value
    End Set
  End Property

  Dim RegistroValor As Object
  ''' <summary>
  ''' Registro de datos que se registrará en el lciente al caer el control.
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  <Description("Registro de datos que se registrará en el lciente al caer el control.")> _
  Public Property Registro() As Object
    Get
      Return RegistroValor
    End Get
    Set(ByVal value As Object)
      RegistroValor = value
    End Set
  End Property
 
  Protected Overrides Function GetScriptDescriptors() As IEnumerable(Of ScriptDescriptor)
    Dim descriptor As New ScriptControlDescriptor("MoniMisi2.ProveedorRegistroServidor", Me.ClientID)
    Dim descriptors As New List(Of ScriptDescriptor)
    descriptor.AddProperty("WebMethod", IIf(Me.WebMethod = "", "Manejo" + Me.ClientID, Me.WebMethod))
    descriptor.AddProperty("Asincronico", Me.Asincronico)
    descriptor.AddProperty("Registro", Me.Registro)
    If Me.Errado <> String.Empty Then
      descriptor.AddEvent("Errado", Me.Errado)
    End If
    If Me.Recibido <> String.Empty Then
      descriptor.AddEvent("Recibido", Me.Recibido)
    End If
    descriptors.Add(descriptor)
    Return descriptors
  End Function

  Protected Overrides Function GetScriptReferences() As IEnumerable(Of ScriptReference)
    Dim scriptRef As New ScriptReference("MoniMisi2.ProveedorRegistroServidor.js", Funciones.NombreCompletoEnsamblado(Me.GetType, "MoniMisi2.ProveedorRegistroServidor"))
    scriptRef.NotifyScriptLoaded = False
    Dim scriptRefs As New List(Of ScriptReference)
    scriptRefs.Add(scriptRef)
    Return scriptRefs
  End Function

  <DataContract()> _
  Public Class Contrato(Of T)
    Public Sub New()
      MyBase.New()
    End Sub
    <DataMember()> _
    Public Accion As String
    Public Mensaje As String
    <DataMember()> _
    Public Registro As T
  End Class
End Class

Public Class ProveeedorRegistroException
  Inherits Exception
  Public Sub New(ByVal pMensaje As String)
    MyBase.New("d:['" + pMensaje + "']")
  End Sub
  Public Sub New(ByVal pMensajes As List(Of String))
    MyBase.New(ListaAString(pMensajes))
  End Sub
  Public Shared Function ListaAString(ByVal pMensajes As List(Of String)) As String
    Dim Mensaje As String = "d:["
    For Each Men In pMensajes
      Mensaje += "'" + Men + "'" + ","
    Next
    Mensaje = Mensaje.Substring(0, Mensaje.Length - 1) + "]"
    Return Mensaje
  End Function
End Class


